GROUP BYを丁寧に考えてみる
最初のテーブル
table:shohin
shohin_id shohin_mei shohin_bunrui hanbai_tanka shiire_tanka torokubi
0001 Tシャツ 衣服 1000 500 2009-09-20
0002 穴あけパンチ 事務用品 500 320 2009-09-11
0003 カッターシャツ 衣服 4000 2800
0004 包丁 キッチン用品 3000 2800 2009-09-20
0005 圧力鍋 キッチン用品 6800 5000 2009-01-15
0006 フォーク キッチン用品 500 2009-09-20
0007 おろしがね キッチン用品 880 790 2008-04-28
0008 ボールペン 事務用品 100 2009-11-11
GROUP BYを使うタイミング
テーブルの中でいくつかのグループに切り分けて集約するとき
商品分類ごと、登録日ごと
ソートしてみたらなんとなく見えた
Posticoのカラム名をクリックしてソートする
商品分類ごとのソート
table:shohin
shohin_id shohin_mei shohin_bunrui hanbai_tanka shiire_tanka torokubi
0004 包丁 キッチン用品 3000 2800 2009-09-20
0005 圧力鍋 キッチン用品 6800 5000 2009-01-15
0006 フォーク キッチン用品 500 2009-09-20
0007 おろしがね キッチン用品 880 790 2008-04-28
<切れ目>
0002 穴あけパンチ 事務用品 500 320 2009-09-11
0008 ボールペン 事務用品 100 2009-11-11
<切れ目>
0001 Tシャツ 衣服 1000 500 2009-09-20
0003 カッターシャツ 衣服 4000 2800
「商品分類ごとに、商品はいくつある」?を数える
code:sql
SELECT shohin_bunrui, count(*)
FROM shohin
GROUP BY shohin_bunrui;
https://gyazo.com/a6f56f7476d096d41b457d1cfaaa66a8
仕入れ単価ごとのソート
table:shohin
shohin_id shohin_mei shohin_bunrui hanbai_tanka shiire_tanka torokubi
0002 穴あけパンチ 事務用品 500 320 2009-09-11
0001 Tシャツ 衣服 1000 500 2009-09-20
0007 おろしがね キッチン用品 880 790 2008-04-28
0003 カッターシャツ 衣服 4000 2800
0004 包丁 キッチン用品 3000 2800 2009-09-20
0005 圧力鍋 キッチン用品 6800 5000 2009-01-15
0006 フォーク キッチン用品 500 2009-09-20
0008 ボールペン 事務用品 100 2009-11-11
「仕入れ単価ごとに、商品はいくつある?」を数える
code:sql
SELECT shiire_tanka, count(*)
FROM shohin
GROUP BY shiire_tanka;
https://gyazo.com/6fbba5cc3b555bec2b463428e286a01c
評価順序で言うと
FROM→WHERE→GROUP BY→SELECT
code:sql
SELECT shiire_tanka, count(*) -- 4
FROM shohin -- 1
WHERE shohin_bunrui = '衣服' -- 2
GROUP BY shiire_tanka; -- 3
書けるものはこの3つだけ
定数
集約関数
GROUP BY句で指定した列名(つまり集約キー)
なぜ書いていけないのか?はテーブルを書いてみるとわかる
このSQLで取り出したいと思っているテーブルを書いてみると...
code:sql
SELECT shohin_bunrui, shohin_mei
FROM shohin
GROUP BY shohin_bunrui;
集約キー以外のカラムの値に何を代表して書けばいいのかわからなくなるはず
table:shohin
shohin_mei shohin_bunrui
「衣服」グループから代表してを書くどれを書く? 衣服
「キッチン用品」グループから代表してを書くどれを書く? キッチン用品
「事務用品」グループから代表してを書くどれを書く? 事務用品